package com.atguigu.paymentdemo.util;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;
import java.text.MessageFormat;
import java.util.concurrent.TimeUnit;
@Slf4j
public class PhoneRechargeCheckUtil {
    private static OkHttpClient client;
    /**
     * 检测手机号码是否能充值接口地址
     */
    private static final String apiUrl_telcheck = "http://op.tianjurenhe.com/ofpay/mobile/telcheck";
    /**
     * 检测手机号码是否能充值接口参数格式
     */
    public static final String HF_TELCHECK_PARAM = "?phoneno={0}&cardnum={1}&&key={2}";
    /**
     * 申请的接口Appkey
     */
    public static final String key = "040460e7b095dd0e2e9d9ca648c3c892";

    private static final int TIME_OUT = 20;

    static {
        client = new OkHttpClient.Builder()
                .connectTimeout(TIME_OUT, TimeUnit.SECONDS)
                .readTimeout(TIME_OUT, TimeUnit.SECONDS)
                .writeTimeout(TIME_OUT, TimeUnit.SECONDS)
                .retryOnConnectionFailure(true)
                .build();
    }

    /**
     * 检测手机号码是否能充值
     *
     * @param phoneNo 需要查询的手机号码
     * @param cardnum 需要查询的面值目前可选：1、2、5、10、20、30、50、100、300
     * @return 返回String结果
     * @throws Exception
     */
    public static String telcheck(String phoneNo, String cardnum) throws IOException {
        //拼接地址与参数
        String reason=null;
        String errorCode=null;
        String url = apiUrl_telcheck + MessageFormat.format(HF_TELCHECK_PARAM, phoneNo, cardnum, key);
        //创建request对象实例
        Request request = new Request.Builder().url(url).build();
        //获取请求response应答
        Response response = client.newCall(request).execute();
        if (response != null) {
            //返回消息体的字符串
            JSONObject result = JSONObject.parseObject(response.body().string());
            if (result.getInteger("error_code") == 0) {
                // 订单提交成功，根据实际业务逻辑进行处理
                 reason=result.get("reason").toString();
                 errorCode=result.get("error_code").toString();
                log.info("订单提交成功:{} ,code:{}",reason,errorCode);
                return errorCode;
            } else {
                // 提交返回码error_code非正常状态，依据官方文档错误码说明，进行逻辑处理
                // 比如：10014，系统异常 / 208516，重复的订单号 等，需要进行二次查询/人工确认处理，不要直接失败处理，避免造成不必要的损失
                reason=result.get("reason").toString();
                errorCode=result.get("error_code").toString();
                log.error("订单提交失败:{},code:{}",reason,errorCode);
                return errorCode;
            }
        } else {
            // 可能网络异常等问题，未获得正确响应结果，建议进行二次查单/人工确认，不要直接失败处理，避免造成不必要的损失
            // 依据自己的业务逻辑进行处理
            return "-1";

        }
    }

    public static void main(String[] args) throws IOException {

        System.out.println(telcheck("18811512031", "10"));

    }
}